iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
AI & Data

[Computer Vision] 電腦視覺下的人臉系列 第 7

[Day7] Face Detection - 使用Amazon Rekognition

  • 分享至 

  • xImage
  •  

rekognition這個詞儼然已成AWS視覺分析平台的代名詞 -- 好記與獨特性的詞能夠幫你免費打廣告

Amazon recognition
reference: medium - Getting Started on Amazon Rekognition and using their SDKs

本文開始

AWS平台是由Amazon提供的一個雲端運算平台,由於近期專案需求,也有註冊帳戶與試用了一段時間;對於想嘗試看雲運算服務或是開發App的人來說,是值得註冊一個帳戶先免費試用的。

而Amazon Rekognition,顧名思義,是在AWS的平台上提供影像分析服務。

同樣的,在開始使用API來開發之前,先了解這個服務該人和使用吧!

  1. 打開瀏覽器,進入AWS主控台,點選右上角的「建立AWS帳戶」,先進行註冊 (註冊過程會需要手機認證與綁定信用卡;若沒有信用卡的只好說聲抱歉了);註冊流程可以參考這篇
  2. 登入後,在上方搜尋框輸入"Rekognition",進入Amazon Rekognition服務
    aws_search
  3. 點選畫面中的「Try Demo」
    aws_try
  4. Demo畫面有很多種不同功能可以選擇 (畫面左方);我們先選Facial analysis,可以在這個頁面看到人臉偵測與相關的分析;透過畫面下方可以上傳或指定網址來分析
    aws_demo

好了,Demo玩了一下,那我們要如何把它實際應用在專案裡呢?

接下來我們就透過現有的AWS帳戶,來實際開發吧!

:AWS的帳戶免費方案不是很容易理解,在使用之前請務必詳閱AWS的定價方案。
-- 但接下來下面的操作步驟是以免費、試用的方式去實作,請安心服用。

DIY起來!

  1. 進入AWS主控台,從上方搜尋SageMaker,進入Amazon Sagemaker服務
  2. 點選右方很明顯的「SageMaker Studio」按鈕,進入Amazon所說的"首款免費的完全整合式開發環境 (IDE)"
    aws_sagemaker
  3. 在SageMaker Studio入門頁面中,選擇「快速入門」:
    • 使用者名稱:sagemaker-user
    • 執行角色:下拉選擇建立新角色 -> 都用預設值 -> 點選「建立角色」
    • 點選提交
      aws_sagemaker_create
  4. 進入SageMaker Studio主控台,建立環境會需要等待一段時間 (畫面上方會提示);我們先另開一個主控台分頁,需要先將Rekognition的權限授予給剛剛SageMaker的使用者:
    • 在搜尋框中輸入IAM,進入IAM儀表板服務
      aws_iam
    • 點選左方的「角色」 -> 用sagemaker篩選角色 -> 選擇角色名稱中有"ExecutionRole"的那一個
      aws_iam_select
    • 在角色摘要畫面中,點選「連接政策」
      aws_iam_link
    • 在篩選框中輸入Rekognition,選擇AmazonRekognitionFullAccess,點選「連接政策」
      aws_iam_link_1
    • 完成!可以關閉這個分頁了
  5. 建立完成後,點選剛剛的使用者名稱sagemaker-user進入使用者摘要 (如果建立完成後沒有出現使用者,請重新整理頁面就會出現了)
    aws_sagemaker_studio
  6. 點選右方的「開啟Studio」終於進入AWS Jupyter開發環境囉!
    aws_sagemaker_studio_enter
  7. 進入後,別被一堆的"快速上手"功能給嚇到;其實這個版面佈置與Google Colab還蠻像的
    aws_jupyter
  8. 接下來讓我們啟動一個Python環境的Notebook:
    • Select a SageMaker image:選擇Data Science
      aws_jupyter_image
    • 點選「Notebook」服務
      aws_jupyter_create
  9. 點選建立後,需要等待kernel啟動完成 (你可以看到下方有Starting...在跑);同時這個頁面是不是與Google Colab上感覺有幾分神似? (連快捷鍵也是一模一樣的)
  10. 確認kernel已啟動完成(Idle狀態),我們就可以開始寫程式囉!
    aws_jupyter_ready

程式碼部分,相關說明在註解中 (每一個區塊都是一個儲存格,請依序執行):

# 匯入必要套件
import boto3
from PIL import Image, ImageDraw
import requests
from io import BytesIO
# 測試看看Amazon API是否可以正常使用
s3 = boto3.resource('s3')
# 列出目前S3服務中所有的儲存貯體
for bucket in s3.buckets.all():
    print(bucket.name)
# 透過URL取得圖片資料,轉成Bytes
response = requests.get('https://memeprod.ap-south-1.linodeobjects.com/user-template/ce186a93c6b54b03441678f32c3847ee.png')
content = response.content

img = Image.open(BytesIO(content))
# 辨識圖片中的人臉
client = boto3.client('rekognition')
result = client.detect_faces(
    Image={
        "Bytes": bytearray(content)
    }
)
img_w, img_h = img.size
draw = ImageDraw.Draw(img)
for face in result['FaceDetails']:
    box = face['BoundingBox']
    w = int(box['Width'] * img_w)
    h = int(box['Height'] * img_h)
    # 定義臉部位置的四個點:左上、左下、右下、右上
    p0 = int(box['Left'] * img_w), int(box['Top'] * img_h)
    p1 = p0[0], p0[1] + h
    p2 = p1[0] + w, p1[1]
    p3 = p2[0], p2[1] - h
    draw.line((p0, p1, p2, p3, p0), width=5, fill='green')
    
    # 五官位置
    for landmark in face['Landmarks']:
        x = int(landmark['X'] * img_w)
        y = int(landmark['Y'] * img_h)
        draw.ellipse((x - 5, y - 5, x + 5, y + 5), fill='red')
        draw.text((x, y - 20), landmark['Type'], fill='pink')
img

aws_jupyter_end

看到這有沒有發現問題?

你真的不打算再看一下圖片,稍微思考一下問題在哪嗎?

那我要揭曉答案囉?

.
.
.

那就是:

這張圖片根本不是人臉,是吉娃娃

對...我相信大家都知道這隻狗是吉娃娃,而且這張圖片也曾經紅過一時,

可是這個系列是人臉偵測,而我們正在用的是Amazon Rekognition的人臉分析服務耶!?

話就說到這邊,其他的就不多說了

明天我們會整理一下人臉偵測的幾個重點,

然後要來處理自行開發人臉分析應用程式時,圖片前處理的一些重點。

下一篇見!

註:完成測試後,記得回SageMaker Studio主控台將你建立的應用程式與使用者都刪除,避免閒置資源被收費喔!


上一篇
[Day6] Face Detection - 使用Google ML Kit (iOS)
下一篇
[Day8] 關於人臉偵測(Face Detection)的二三事
系列文
[Computer Vision] 電腦視覺下的人臉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言